package com.dahua.constructor;

import com.dahua.A;
import com.dahua.B;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 * @author chen_MingLiang
 * @version 1.0
 * @date 2020/1/30 14:43
 */
@Component
//@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class OrderService {

	public OrderService(){}
@Autowired
	public OrderService(A a){}

	public OrderService (A a, B b){}

	/**
	 * spring推断构造方法
	 * 1.我们现在默认是@Component,这种我们知道不是自动装配,因为注入模型为NO,那么这种情况下,就是不自动注入,不自动注入的话,带参构造里面的参数无法注入,所以spring推断构造方法没用,所以一定会走无参构造,所以推断构造方法那里一定返回null
	 * 2.如果我们在某个构造方法上加入@Autowired,那么也是手动装配,我们是手动指定了某个构造,那么spring推断构造方法就会推断出这个方法
	 * 3.如果我们在3个构造方法上不带任何注解,只留下一个带参构造,那么spring没的选,只能用这个代餐构造,所以会推断出来.1为null是因为不需要,后面用的时候直接拿无参构造即可
	 * 4.如果我们3个构造不带任何注解,但是我们通过BeanFactoryPostProcessor把注入模型改成byConstructor,那么spring会找到他认为最合理的构造方法,并且推断出来,我试了下是最长的构造
	 */
}
